# -*- encoding: utf-8 -*-
# -*- coding: utf-8 -*-

'''
@author: 5605 - António Delgado
@date: 05 de Novembro de 2013
@obs: Trabalho de Linguagens de Programação em Python
      Docente: Prof. Jasnau Caeiro
'''
import csv
import base_dados
import sqlalchemy
from sqlalchemy.orm import sessionmaker
from sqlalchemy import *


class Estatisiticas():
    '''
    
    '''
    
    def estatistica1(self, dados):
        '''
        

        @param dados: este método recebe o parametro dados que
                      é a ligação à lista com os dados retirados da base de dados.
        '''
        
        instituicao = {3: 'Instituicao', 4: 'Curso', 7: 'Colocados', 9: 'Vagas Sobrantes'}
        
        estt1 = []
        
        for l in dados:
            if 'Universidade' in l[3].lower() or 'Instituto' in l[3].lower() or 'Escola' in l[3].lower():
                estat1 = [l[0], l[1], l[3]]
                
                for c in xrange(5, 21):
                    if l[c] > 0 and l[c] != '-':
                        estat1.append(instituicao[c])
                    pass
                estt1.append(estat1)
              
        return estt1
        pass
    
    def estatistica2(self, dados):
        '''
        
        
        @param dados: este método recebe o parametro dados que
                      é a ligação à lista com os dados retirados da base de dados.
                      
        fonte: http://pl.digipedia.org/usenet/thread/15875/25074/

        '''
        
        niveis = []
        lista_niveis = []
        
        for n in dados:
            if 'Universidade' in l[3].lower() or 'Instituto' in l[3].lower() or 'Escola' in l[3].lower():
                
                if n[3] not in niveis:
                    niveis.append(n[3])
                    nivel = n[3]
                    lista_niveis.append(nivel)

                    for z in range(5, 21):
                        if n[z] != "-" or n[z] > "0":
                            lista_niveis.append(n[z])
                        else:
                            lista_niveis.append(0)
                        pass
                    pass
                else:
                    for j in lista_niveis:
                        if j == n[1]:
                            ano = lista_niveis.index(n[1]) + 1
                            for z in range(5, 21):
                                if n[z] != "-" or n[z] > '0':
                                    lista_niveis[instituicao] = lista_niveis[instituicao] + n[z]
                                    instituicao = instituicao + 1
                                else:
                                    lista_niveis[instituicao]
                                    instituicao = instituicao + 1
                                    pass
                                pass
                            pass
                        pass
                    pass
                pass
            pass
        estt2 = (lista_niveis[i:i+17] for i in range(0, len(lista_niveis), 17))
        return estt2
    
    
        pass
    
    def estatistica3(self, dados):
        '''
        
        
        @param dados: este método recebe o parametro dados que
                      é a ligação à lista com os dados retirados da base de dados.
                      
        fonte: http://pl.digipedia.org/usenet/thread/15875/25074/
        
        '''
        
        niveis = []
        lista_niveis = []
        
        for n in dados:
            if 'Universidade' in l[3].lower() or 'Instituto' in l[3].lower() or 'Escola' in l[3].lower():
                
                if n[2] not in niveis:
                    niveis.append(n[2])
                    nivel = n[2]
                    lista_niveis.append(nivel)

                    for z in range(5, 21):
                        if n[z] != "-" or n[z] > "0":
                            lista_niveis.append(1)
                        else:
                            lista_niveis.append(0)
                        pass
                    pass
                else:
                    for j in lista_niveis:
                        if j == n[2]:
                            ano = lista_niveis.index(n[2]) + 1
                            for z in range(5, 21):
                                if n[z] != "-" or n[z] > '0':
                                    lista_niveis[instituicao] = lista_niveis[instituicao] + 1
                                    instituicao = instituicao + 1
                                else:
                                    lista_niveis[instituicao]
                                    instituicao = instituicao + 1
                                    pass
                                pass
                            pass
                        pass
                    pass
                pass
            pass
        
        estt3 = (lista_niveis[i:i+17] for i in range(0, len(lista_niveis), 17))
        return estt3
        pass
    
    def estatistica4(self, dados):
        '''
        
        
        @param dados: este método recebe o parametro dados que
                      é a ligação à lista com os dados retirados da base de dados.
                      
        fonte: http://pl.digipedia.org/usenet/thread/15875/25074/
        
        '''
        
        niveis = []
        lista_niveis = []
        
        for n in dados:
            if 'Universidade' in l[3].lower() or 'Instituto' in l[3].lower() or 'Escola' in l[3].lower():
                
                if n[2] not in niveis:
                    niveis.append(n[2])
                    nivel = n[2]
                    lista_niveis.append(nivel)

                    for z in range(5, 21):
                        if n[z] != "-" or n[z] > "0":
                            lista_niveis.append(1)
                        else:
                            lista_niveis.append(0)
                        pass
                    pass
                else:
                    for j in lista_niveis:
                        if j == n[2]:
                            # está a definir na variavel ano o indice inicial,
                            # para depois ir incrementando.
                            ano = lista_niveis.index(n[2]) + 1 
                            for z in range(5, 21):
                                if n[z] != "-" or n[z] > '0':
                                    lista_niveis[ano] = lista_niveis[instituicao] + n[z]
                                    instituicao = instituicao + 1 # incrementa o ano
                                else:
                                    lista_niveis[ano]
                                    ano = ano + 1 # incrementa o ano
                                    pass
                                pass
                            pass
                        pass
                    pass
                pass
            pass
        estt4 = (lista_niveis[i:i+17] for i in range(0, len(lista_niveis), 17))
        return estt4
        pass
    
    def csv(self, estatistica, nome):
        '''
        Método que passa os dados recebidos das estatísticas 
        para um ficheiro .CSV
        
        @param estatistica: ete parametro é o que é retornado 
                            das estatísticas e contêm os dados das mesmas
        
        @param nome: este parametro é o que vai definir o nome
                     com que vai ser criado o ficheiro .CSV
        '''
        
        file = open('{0}.csv'.format(nome),"wb")
        csvwriter = csv.writer(file, delimiter=',')
        
        # escreve os dados recebidos como parametro no ficheiro
        for linha in estatistica:
            csvwriter.writerow(linha)
        
        file.close()    
        pass
